package gestores;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.TimerTask;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.Timer;

import utilidades.DescargaDeDatos;
import utilidades.EstractorDeDatos;
import clasesBasicas.Empresa;

public class SistemaEmpresas {
	
	String[] empresasIbex = {"Abertis","Acciona","Acs","AmadeusItHold-a-","ArcelormittalReg","BancoSabadell","BancoSantander",
			"BankiaSa","Bankinter","Bbva","BcoPopularEspanol","BolsasYMercados","Caixabank","Dia","EbroFoods","Enagas","Ferrovial",
			"FomentoConstr.","Gamesa", "GasNaturalSdg","GrifolsA","Iberdrola","Inditex","IndraSistemas-a-","Intl.Cons.AirGrp","Jazztel","Mapfre","MediasetEspana",
			"Ohl","RedElectricaCorp","Repsol","Sacyr","TecnicasReunidas","Telefonica","Viscofan"};
	
	HashMap<String, Empresa>listaEmpresas=null;
	SistemaEmpresas sE=null;
	String ultimaActualización=null;
	
	private Connection conexion;
	
	public SistemaEmpresas() throws Exception
	{
		//Pongo un temporizador, cada 15 minutos actualiza los datos
				Timer temporizador= new Timer(2000, new ActionListener(){
					
					public void actionPerformed(ActionEvent e) {
						
						try {
							activarActualizaciones();
						} catch (Exception e1) {
							JOptionPane.showMessageDialog(null, "No se ha podido actualizar el programa. Compruebe su conexión a internet.", "Error al actualizar", JOptionPane.ERROR_MESSAGE, new ImageIcon());
						}
					}			
					
				});
				temporizador.start();
				this.activarActualizaciones();
	}
	
	
	public static void main (String[]args) throws Exception
	{
		
		final SistemaEmpresas sistemaPrincipal= new SistemaEmpresas();
		
		while(sistemaPrincipal.listaEmpresas==null)
		{
			System.out.println("Sigo aqui"); //espera hasta que actualice la lista
		}
	
		if(sistemaPrincipal.listaEmpresas!=null)
		{
			sistemaPrincipal.mostrarEmpresasIbex();
		}
		SistemaUsuarios sU= new SistemaUsuarios();
		//System.out.println("eee");
		
	}


	private void mostrarEmpresasIbex() {
		
		for(int i=0;i<empresasIbex.length;i++)
		{
			Empresa temp=listaEmpresas.get(empresasIbex[i]);
			temp.mostrar();
			System.out.println(i);
		}
		
	}


	private void activarActualizaciones() throws Exception {
		
		String sql="SELECT * FROM EMPRESA";
		ResultSet resultado = null; 
		Statement sentencia= null;
		
        try {  
            sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 
            resultado = sentencia.executeQuery(sql); 
             
        } catch (SQLException e) { 
            e.printStackTrace(); 
        }
        
        while(resultado.next())
        {
        	Empresa temp=new Empresa(resultado.getInt("COD_EMPRESA"), resultado.getString("NOMBRE_EMP"), resultado.getString("DESCRIPCION"), resultado.getDouble("ULTIMO"), resultado.getDouble("DIFERENCIA"), resultado.getDouble("VOLUMEN"), resultado.getDouble("MAX_DIARIO"), resultado.getDouble("MIN_DIARIO"), resultado.getTimestamp("FECHA"));
        	listaEmpresas.put(temp.getNombre(), temp);
        }
	
		
	}
	
	private Empresa getEmpresa(String nombre)
	{
		return listaEmpresas.get(nombre);
	}
	


		
	private void obtenerConexion()
	{
		//System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII");
		try { 
	        Class.forName("oracle.jdbc.OracleDriver"); 
	        String BaseDeDatos = "jdbc:oracle:thin:@bdprog4.no-ip.org:1521:XE";
	          
	        conexion = DriverManager.getConnection(BaseDeDatos, "admin","admin"); 
	        
	        if (conexion != null) { 
	            System.out.println("----------------Conexion exitosa!-------------------"); 
	        } else { 
	            System.out.println("Conexion fallida!"); 
	        } 
	    } catch (Exception e) { 
	        e.printStackTrace(); 
	    }
	}
	
	public Connection getConexion() { 
	    return conexion; 
	}
}
